/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modules.estoque.facade;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import modules.estoque.bo.CargoBO;
import modules.estoque.bo.ClienteBO;
import modules.estoque.bo.FornecedorBO;
import modules.estoque.bo.GerenciadorBO;
import modules.estoque.bo.GruposAcessoBO;
import modules.estoque.bo.GruposProdutoBO;
import modules.estoque.bo.PermissaoBO;
import modules.estoque.bo.ProdutoBO;
import modules.estoque.bo.TiposMovimentoBO;
import modules.estoque.bo.UsuarioBO;
import modules.estoque.exception.EspacoExcedidoPaleteException;
import modules.estoque.exception.EspacoExcedidoRuaException;
import modules.estoque.exception.PaleteNaoEnderecadoException;
import modules.estoque.exception.PaleteOcupadoException;
import modules.estoque.exception.SaldoInsuficienteException;
import modules.estoque.models.dto.Cargo;
import modules.estoque.models.dto.Cliente;
import modules.estoque.models.dto.Entrada;
import modules.estoque.models.dto.Fornecedor;
import modules.estoque.models.dto.GruposAcesso;
import modules.estoque.models.dto.GruposProduto;
import modules.estoque.models.dto.Permissao;
import modules.estoque.models.dto.Produto;
import modules.estoque.models.dto.Saida;
import modules.estoque.models.dto.TiposMovimento;
import modules.estoque.models.dto.Usuario;
import modules.estoque.models.dto.custom.VwAgrupamentoProdutoPreco;

/**
 *
 * @author Clezio
 */
public class WMSFacade {
    public boolean saveFornecedor(Fornecedor obj){
        return new FornecedorBO().save(obj);
    }

    public List<Fornecedor> obterFornecedores(String sql){
        return new FornecedorBO().getList(sql);
    }

    public Fornecedor obterFornecedorById(Integer id){
        return new FornecedorBO().retrieve(id);
    }

    public boolean deleteFornecedor(Fornecedor obterFornecedor) {
        return new FornecedorBO().delete(obterFornecedor);
    }

    public List<GruposProduto> obterGruposProdutos(String sql) {
        return new GruposProdutoBO().getList(sql);
    }

    public GruposProduto obterGruposProdutoById(Integer id) {
        return new GruposProdutoBO().retrieve(id);
    }

    public boolean saveGruposProduto(GruposProduto obj) {
        return new GruposProdutoBO().save(obj);
    }

    public boolean deleteGruposProduto(GruposProduto gruposProduto) {
        return new GruposProdutoBO().delete(gruposProduto);
    }

    public List<Produto> obterProdutos(String sql) {
        return new ProdutoBO().getList(sql);
    }

    public Produto obterProdutoById(int id) {
        return new ProdutoBO().retrieve(id);
    }

    public boolean saveProduto(Produto obj) {
        return new ProdutoBO().save(obj);
    }

    public boolean deleteProduto(Produto obj) {
        return new ProdutoBO().delete(obj);
    }

    public Produto obterProdutoByCodigo(String codigo) {
        return new ProdutoBO().obterProdutoByCodigo(codigo);
    }

    public boolean registrarEntrada(Entrada entrada) throws EspacoExcedidoPaleteException, EspacoExcedidoRuaException {
        return new GerenciadorBO().registrarEntrada(entrada);
    }

    public boolean registrarSaida(Saida saida) throws SaldoInsuficienteException {
        return new GerenciadorBO().registrarSaida(saida);
    }

    public GruposAcesso obterGruposAcessoById(int id) {
        return new GruposAcessoBO().retrieve(id);
    }

    public List<GruposAcesso> obterGruposAcessos(String sql) {
        return new GruposAcessoBO().getList(sql);
    }

    public boolean saveGruposAcesso(GruposAcesso obj) {
        return new GruposAcessoBO().save(obj);
    }

    public boolean deleteGruposAcesso(GruposAcesso obj){
        return new GruposAcessoBO().delete(obj);
    }

    public List<Permissao> obterPermissoes(String sql) {
        return new PermissaoBO().getList(sql);
    }

    public Usuario obterUsuarioById(int id) {
        return new UsuarioBO().retrieve(id);
    }

    public List<Usuario> obterUsuarios(String sql) {
        return new UsuarioBO().getList(sql);
    }

    public boolean saveUsuario(Usuario obj) {
        return new UsuarioBO().save(obj);
    }

    public boolean deleteUsuario(Usuario usuario) {
        return new UsuarioBO().delete(usuario);
    }

    public boolean alterarSenha(Usuario usuario) {
        return new UsuarioBO().alterarSenha(usuario);
    }

    public List<Cliente> listarClientes(String sql) {
        return new ClienteBO().getList(sql);
    }

    public boolean saveCliente(Cliente obj) {
        return new ClienteBO().save(obj);
    }

    public List<Cliente> obterClientes(String sql) {
        return new ClienteBO().getList(sql);
    }

    public Cliente obterClienteById(int id) {
        return new ClienteBO().retrieve(id);
    }

    public boolean deleteCliente(Cliente cliente) {
        return new ClienteBO().delete(cliente);
    }

    public List<TiposMovimento> obterTiposMovimentos(String sql) {
        return new TiposMovimentoBO().getList(sql);
    }

    public TiposMovimento obterTiposMovimentoById(int id) {
        return new TiposMovimentoBO().retrieve(id);
    }

    public List<Entrada> listarEntradasByData(Date date) {
        return new GerenciadorBO().listarEntradasByData(date);
    }

    public Entrada obterEntradaById(Integer id) {
        return new GerenciadorBO().obterEntradaById(id);
    }

    public boolean estornarEntrada(Entrada entrada) {
        return new GerenciadorBO().estornarEntrada(entrada);
    }

    public Saida obterSaidaById(int id) {
        return new GerenciadorBO().obterSaidaById(id);
    }

    public boolean estornarEntrada(Saida saida) {
        return new GerenciadorBO().estornarSaida(saida);
    }

    public List<Saida> listarSaidasByData(Date date) {
        return new GerenciadorBO().listarSaidasByData(date);
    }

    public Cargo obterCargoById(int id) {
        return new CargoBO().retrieve(id);
    }

    public boolean saveCargo(Cargo obj) {
        return new CargoBO().save(obj);
    }

    public List<Cargo> obterCargos(String sql) {
        return new CargoBO().getList(sql);
    }

    public boolean deleteCargo(Cargo cargo) {
        return new CargoBO().delete(cargo);
    }
    
    public List<Entrada> listarEntradasByProduto(Produto produto) {
        return new GerenciadorBO().listarEntradasByProduto(produto);
    }
    
    public List<VwAgrupamentoProdutoPreco> listarEntradasAgrupadaByProdutoPreco(Produto produto) {
        return new GerenciadorBO().listarEntradasAgrupadaByProdutoPreco(produto);
    }
}
